#include "Cliente.h"
#include <iostream>
#include <string>
#include <jsoncpp/json.h>
#include "../Common/Hmac.h"

Cliente::Cliente(Socket* socket)
{
	this->socket = socket;
	conectado = true;
}

bool Cliente::estaConectado()
{
	return conectado;
}

void Cliente::enviar(const Json::Value& root)
{
	socket->enviar(root, usuario.getContrasena());
}

void Cliente::recibir(Json::Value& root)
{
	conectado = (socket->recibir(root, usuario.getContrasena()) != 0);
}

void Cliente::dejarDeRecibir()
{
	if(conectado)
		socket->shutDown(DEJAR_DE_RECIBIR);
}

void Cliente::dejarDeEnviar()
{
	if(conectado)
		socket->shutDown(DEJAR_DE_ENVIAR);
}

void Cliente::dejarDeEnviarYRecibir()
{
	if(conectado)
		socket->shutDown(DEJAR_DE_ENVIAR_Y_RECIBIR);
}

unsigned Cliente::getMaxNivelAlcanzado() const
{
	return this->usuario.getMaxNivelAlcanzado();
}

void Cliente::incrementarNivel(const unsigned& nivel)
{
	if(nivel == usuario.getMaxNivelAlcanzado())
		usuario.setMaxNivelAlcanzado(nivel+1);
}

const Usuario& Cliente::getUsuario() const
{
	return usuario;
}

Cliente::~Cliente()
{
	delete socket;
}

void Cliente::asignarUsuario(Usuario usuario)
{
	this->usuario = usuario;
}

unsigned Cliente::getPuntaje()
{
	return usuario.getPuntaje();
}

std::string Cliente::obtenerNombreDeUsuario()
{
	return usuario.getNombre();
}

void Cliente::incrementarPuntaje(const unsigned & inc)
{
	unsigned puntaje = usuario.getPuntaje() + inc;
	usuario.setPuntaje(puntaje);
}
